package com.jfinal.bbsapp.common.kit;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.commons.codec.binary.Base64;


@SuppressWarnings("restriction")
public class Base64Utils {

	//网络图片转成Base64码
	public static String imgBase64(String imgURL) {
		ByteArrayOutputStream outPut = new ByteArrayOutputStream();
	    byte[] data = new byte[1024];
	    try {  
	        URL url = new URL(imgURL);
	        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
	        conn.setRequestMethod("GET");  
	        conn.setConnectTimeout(10 * 1000);  
	
	        if(conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
	        	return "fail";//连接失败/链接失效/图片不存在
	        }
	        InputStream inStream = conn.getInputStream();  
	        int len = -1;
	        while ((len = inStream.read(data)) != -1) {
	        	outPut.write(data, 0, len);
	        }
	        inStream.close();  
	    } catch (IOException e) {  
	        e.printStackTrace();  
	    }  
	    // 对字节数组Base64编码  
	    Base64 base64encoder = new Base64();
	    return base64encoder.encodeBase64String(outPut.toByteArray());
	    //BASE64Encoder encoder = new BASE64Encoder(); 
	    //return encoder.encode(outPut.toByteArray()); 
	}
	
	////将图片文件转化为字节数组字符串，并对其进行Base64编码处理
	public static String GetImageStr(String imgFile){
		InputStream in = null;
		byte[] data = null;
		//读取图片字节数组
		try{
			in = new FileInputStream(imgFile);
			data = new byte[in.available()];
			in.read(data);
			in.close();
		}
		catch (IOException e){
			e.printStackTrace();
		}
		//对字节数组Base64编码
		//BASE64Encoder encoder = new BASE64Encoder();
		//return encoder.encode(data);//返回Base64编码过的字节数组字符串
		
		Base64 base64encoder = new Base64();
		return base64encoder.encodeBase64String(data);//返回Base64编码过的字节数组字符串
	}
	
	
	//Base64解码并生成图片 
	public static boolean GenerateImage(String base64str,String savepath) { //对字节数组字符串进行Base64解码并生成图片
		if (base64str == null) //图像数据为空
			return false;
		Base64 base64encoder = new Base64();
		//BASE64Decoder decoder = new BASE64Decoder();
		try{
			//Base64解码
			//byte[] b = decoder.decodeBuffer(base64str);
			byte[] b = base64encoder.decodeBase64(base64str);
			// System.out.println("解码完成");
			for(int i=0;i<b.length;++i){
				if(b[i]<0){//调整异常数据
					b[i]+=256;
				}
			}
			// System.out.println("开始生成图片");
			//生成jpeg图片
			OutputStream out = new FileOutputStream(savepath);
			out.write(b);
			out.flush();
			out.close();
			return true;
		}
		catch (Exception e){
			return false;
		}
	}
}